home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 October: Mac OS SDK / Dev.CD Oct 97 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Universal / Interfaces / CIncludes / Menus.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-08-12  |  13.4 KB  |  429 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        Menus.h
  3.  
  4.      Contains:    Menu Manager Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    Universal Interfaces 3.0.1
  8.  
  9.      Copyright:    © 1985-1997 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        Please include the the file and version information (from above) with
  12.                  the problem description.  Developers belonging to one of the Apple
  13.                  developer programs can submit bug reports to:
  14.  
  15.                      devsupport@apple.com
  16.  
  17. */
  18. #ifndef __MENUS__
  19. #define __MENUS__
  20.  
  21. #ifndef __CONDITIONALMACROS__
  22. #include <ConditionalMacros.h>
  23. #endif
  24. #ifndef __TYPES__
  25. #include <Types.h>
  26. #endif
  27. #ifndef __QUICKDRAW__
  28. #include <Quickdraw.h>
  29. #endif
  30.  
  31.  
  32.  
  33. #if PRAGMA_ONCE
  34. #pragma once
  35. #endif
  36.  
  37. #ifdef __cplusplus
  38. extern "C" {
  39. #endif
  40.  
  41. #if PRAGMA_IMPORT
  42. #pragma import on
  43. #endif
  44.  
  45. #if PRAGMA_STRUCT_ALIGN
  46.     #pragma options align=mac68k
  47. #elif PRAGMA_STRUCT_PACKPUSH
  48.     #pragma pack(push, 2)
  49. #elif PRAGMA_STRUCT_PACK
  50.     #pragma pack(2)
  51. #endif
  52.  
  53.  
  54. enum {
  55.     noMark                        = 0                                /*mark symbol for MarkItem*/
  56. };
  57.  
  58.  
  59. enum {
  60.                                                                 /* menu defProc messages */
  61.     mDrawMsg                    = 0,
  62.     mChooseMsg                    = 1,
  63.     mSizeMsg                    = 2,
  64.     mDrawItemMsg                = 4,
  65.     mCalcItemMsg                = 5
  66. };
  67.  
  68.  
  69. enum {
  70.     textMenuProc                = 0,
  71.     hMenuCmd                    = 27,                            /*itemCmd == 0x001B ==> hierarchical menu*/
  72.     hierMenu                    = -1,                            /*a hierarchical menu - for InsertMenu call*/
  73.     mPopUpMsg                    = 3,                            /*menu defProc messages - place yourself*/
  74.     mctAllItems                    = -98,                            /*search for all Items for the given ID*/
  75.     mctLastIDIndic                = -99                            /*last color table entry has this in ID field*/
  76. };
  77.  
  78.  
  79. struct MenuInfo {
  80.     short                             menuID;
  81.     short                             menuWidth;
  82.     short                             menuHeight;
  83.     Handle                             menuProc;
  84.     long                             enableFlags;
  85.     Str255                             menuData;
  86. };
  87. typedef struct MenuInfo MenuInfo;
  88.  
  89. typedef MenuInfo *                        MenuPtr;
  90. typedef MenuPtr *                        MenuHandle;
  91. /* MenuRef is obsolete.  Use MenuHandle. */
  92. typedef MenuHandle                         MenuRef;
  93. struct MCEntry {
  94.     short                             mctID;                        /*menu ID.  ID = 0 is the menu bar*/
  95.     short                             mctItem;                    /*menu Item. Item = 0 is a title*/
  96.     RGBColor                         mctRGB1;                    /*usage depends on ID and Item*/
  97.     RGBColor                         mctRGB2;                    /*usage depends on ID and Item*/
  98.     RGBColor                         mctRGB3;                    /*usage depends on ID and Item*/
  99.     RGBColor                         mctRGB4;                    /*usage depends on ID and Item*/
  100.     short                             mctReserved;                /*reserved for internal use*/
  101. };
  102. typedef struct MCEntry MCEntry;
  103.  
  104. typedef MCEntry *                        MCEntryPtr;
  105. typedef MCEntry                         MCTable[1];
  106. typedef MCEntry *                        MCTablePtr;
  107. typedef MCTablePtr *                    MCTableHandle;
  108. struct MenuCRsrc {
  109.     short                             numEntries;                    /*number of entries*/
  110.     MCTable                         mcEntryRecs;                /*ARRAY [1..numEntries] of MCEntry*/
  111. };
  112. typedef struct MenuCRsrc MenuCRsrc;
  113.  
  114. typedef MenuCRsrc *                        MenuCRsrcPtr;
  115. typedef MenuCRsrcPtr *                    MenuCRsrcHandle;
  116.  
  117.  
  118. typedef CALLBACK_API( void , MenuDefProcPtr )(short message, MenuHandle theMenu, Rect *menuRect, Point hitPt, short *whichItem);
  119. typedef CALLBACK_API( long , MenuBarDefProcPtr )(short selector, short message, short parameter1, long parameter2);
  120. typedef CALLBACK_API( void , MenuHookProcPtr )(void );
  121. typedef CALLBACK_API( short , MBarHookProcPtr )(Rect *menuRect);
  122. /*
  123.     WARNING: MBarHookProcPtr uses register based parameters under classic 68k
  124.              and cannot be written in a high-level language without 
  125.              the help of mixed mode or assembly glue.
  126. */
  127. typedef STACK_UPP_TYPE(MenuDefProcPtr)                             MenuDefUPP;
  128. typedef STACK_UPP_TYPE(MenuBarDefProcPtr)                         MenuBarDefUPP;
  129. typedef STACK_UPP_TYPE(MenuHookProcPtr)                         MenuHookUPP;
  130. typedef REGISTER_UPP_TYPE(MBarHookProcPtr)                         MBarHookUPP;
  131. enum { uppMenuDefProcInfo = 0x0000FF80 };                         /* pascal no_return_value Func(2_bytes, 4_bytes, 4_bytes, 4_bytes, 4_bytes) */
  132. enum { uppMenuBarDefProcInfo = 0x00003AB0 };                     /* pascal 4_bytes Func(2_bytes, 2_bytes, 2_bytes, 4_bytes) */
  133. enum { uppMenuHookProcInfo = 0x00000000 };                         /* pascal no_return_value Func() */
  134. enum { uppMBarHookProcInfo = 0x000000CF };                         /* SPECIAL_CASE_PROCINFO(12) */
  135. #define NewMenuDefProc(userRoutine)                             (MenuDefUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppMenuDefProcInfo, GetCurrentArchitecture())
  136. #define NewMenuBarDefProc(userRoutine)                             (MenuBarDefUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppMenuBarDefProcInfo, GetCurrentArchitecture())
  137. #define NewMenuHookProc(userRoutine)                             (MenuHookUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppMenuHookProcInfo, GetCurrentArchitecture())
  138. #define NewMBarHookProc(userRoutine)                             (MBarHookUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppMBarHookProcInfo, GetCurrentArchitecture())
  139. #define CallMenuDefProc(userRoutine, message, theMenu, menuRect, hitPt, whichItem)  CALL_FIVE_PARAMETER_UPP((userRoutine), uppMenuDefProcInfo, (message), (theMenu), (menuRect), (hitPt), (whichItem))
  140. #define CallMenuBarDefProc(userRoutine, selector, message, parameter1, parameter2)  CALL_FOUR_PARAMETER_UPP((userRoutine), uppMenuBarDefProcInfo, (selector), (message), (parameter1), (parameter2))
  141. #define CallMenuHookProc(userRoutine)                             CALL_ZERO_PARAMETER_UPP((userRoutine), uppMenuHookProcInfo)
  142. #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
  143.     /* CallMBarHookProc can't be called from classic 68k without glue code */
  144. #else
  145.     #define CallMBarHookProc(userRoutine, menuRect)             CALL_ONE_PARAMETER_UPP((userRoutine), uppMBarHookProcInfo, (menuRect))
  146. #endif
  147.  
  148. EXTERN_API( short )
  149. GetMBarHeight                    (void)                                                        TWOWORDINLINE(0x3EB8, 0x0BAA);
  150.  
  151. EXTERN_API( void )
  152. InitMenus                        (void)                                                        ONEWORDINLINE(0xA930);
  153.  
  154. EXTERN_API( MenuHandle )
  155. NewMenu                            (short                     menuID,
  156.                                  ConstStr255Param         menuTitle)                            ONEWORDINLINE(0xA931);
  157.  
  158. EXTERN_API( MenuHandle )
  159. GetMenu                            (short                     resourceID)                            ONEWORDINLINE(0xA9BF);
  160.  
  161. EXTERN_API( void )
  162. DisposeMenu                        (MenuHandle             theMenu)                            ONEWORDINLINE(0xA932);
  163.  
  164. EXTERN_API( void )
  165. AppendMenu                        (MenuHandle             menu,
  166.                                  ConstStr255Param         data)                                ONEWORDINLINE(0xA933);
  167.  
  168. EXTERN_API( void )
  169. InsertResMenu                    (MenuHandle             theMenu,
  170.                                  ResType                 theType,
  171.                                  short                     afterItem)                            ONEWORDINLINE(0xA951);
  172.  
  173. EXTERN_API( void )
  174. InsertMenu                        (MenuHandle             theMenu,
  175.                                  short                     beforeID)                            ONEWORDINLINE(0xA935);
  176.  
  177. EXTERN_API( void )
  178. DeleteMenu                        (short                     menuID)                                ONEWORDINLINE(0xA936);
  179.  
  180. EXTERN_API( void )
  181. AppendResMenu                    (MenuHandle             theMenu,
  182.                                  ResType                 theType)                            ONEWORDINLINE(0xA94D);
  183.  
  184. EXTERN_API( void )
  185. InsertMenuItem                    (MenuHandle             theMenu,
  186.                                  ConstStr255Param         itemString,
  187.                                  short                     afterItem)                            ONEWORDINLINE(0xA826);
  188.  
  189. EXTERN_API( void )
  190. DeleteMenuItem                    (MenuHandle             theMenu,
  191.                                  short                     item)                                ONEWORDINLINE(0xA952);
  192.  
  193. EXTERN_API( long )
  194. MenuKey                            (CharParameter             ch)                                    ONEWORDINLINE(0xA93E);
  195.  
  196. EXTERN_API( void )
  197. HiliteMenu                        (short                     menuID)                                ONEWORDINLINE(0xA938);
  198.  
  199. EXTERN_API( void )
  200. SetMenuItemText                    (MenuHandle             theMenu,
  201.                                  short                     item,
  202.                                  ConstStr255Param         itemString)                            ONEWORDINLINE(0xA947);
  203.  
  204. EXTERN_API( void )
  205. GetMenuItemText                    (MenuHandle             theMenu,
  206.                                  short                     item,
  207.                                  Str255                 itemString)                            ONEWORDINLINE(0xA946);
  208.  
  209. EXTERN_API( void )
  210. SetItemMark                        (MenuHandle             theMenu,
  211.                                  short                     item,
  212.                                  CharParameter             markChar)                            ONEWORDINLINE(0xA944);
  213.  
  214. EXTERN_API( void )
  215. GetItemMark                        (MenuHandle             theMenu,
  216.                                  short                     item,
  217.                                  CharParameter *        markChar)                            ONEWORDINLINE(0xA943);
  218.  
  219. EXTERN_API( void )
  220. SetItemCmd                        (MenuHandle             theMenu,
  221.                                  short                     item,
  222.                                  CharParameter             cmdChar)                            ONEWORDINLINE(0xA84F);
  223.  
  224. EXTERN_API( void )
  225. GetItemCmd                        (MenuHandle             theMenu,
  226.                                  short                     item,
  227.                                  CharParameter *        cmdChar)                            ONEWORDINLINE(0xA84E);
  228.  
  229. EXTERN_API( void )
  230. SetItemIcon                        (MenuHandle             theMenu,
  231.                                  short                     item,
  232.                                  short                     iconIndex)                            ONEWORDINLINE(0xA940);
  233.  
  234. EXTERN_API( void )
  235. GetItemIcon                        (MenuHandle             theMenu,
  236.                                  short                     item,
  237.                                  short *                iconIndex)                            ONEWORDINLINE(0xA93F);
  238.  
  239. EXTERN_API( void )
  240. SetItemStyle                    (MenuHandle             theMenu,
  241.                                  short                     item,
  242.                                  StyleParameter         chStyle)                            ONEWORDINLINE(0xA942);
  243.  
  244. EXTERN_API( void )
  245. GetItemStyle                    (MenuHandle             theMenu,
  246.                                  short                     item,
  247.                                  Style *                chStyle);
  248.  
  249. EXTERN_API( MenuHandle )
  250. GetMenuHandle                    (short                     menuID)                                ONEWORDINLINE(0xA949);
  251.  
  252. EXTERN_API( void )
  253. CalcMenuSize                    (MenuHandle             theMenu)                            ONEWORDINLINE(0xA948);
  254.  
  255. EXTERN_API( void )
  256. DisableItem                        (MenuHandle             theMenu,
  257.                                  short                     item)                                ONEWORDINLINE(0xA93A);
  258.  
  259. EXTERN_API( void )
  260. EnableItem                        (MenuHandle             theMenu,
  261.                                  short                     item)                                ONEWORDINLINE(0xA939);
  262.  
  263. EXTERN_API( void )
  264. FlashMenuBar                    (short                     menuID)                                ONEWORDINLINE(0xA94C);
  265.  
  266. EXTERN_API( long )
  267. PopUpMenuSelect                    (MenuHandle             menu,
  268.                                  short                     top,
  269.                                  short                     left,
  270.                                  short                     popUpItem)                            ONEWORDINLINE(0xA80B);
  271.  
  272. EXTERN_API( long )
  273. MenuChoice                        (void)                                                        ONEWORDINLINE(0xAA66);
  274.  
  275. EXTERN_API( void )
  276. DeleteMCEntries                    (short                     menuID,
  277.                                  short                     menuItem)                            ONEWORDINLINE(0xAA60);
  278.  
  279. EXTERN_API( MCTableHandle )
  280. GetMCInfo                        (void)                                                        ONEWORDINLINE(0xAA61);
  281.  
  282. EXTERN_API( void )
  283. SetMCInfo                        (MCTableHandle             menuCTbl)                            ONEWORDINLINE(0xAA62);
  284.  
  285. EXTERN_API( void )
  286. DisposeMCInfo                    (MCTableHandle             menuCTbl)                            ONEWORDINLINE(0xAA63);
  287.  
  288. EXTERN_API( MCEntryPtr )
  289. GetMCEntry                        (short                     menuID,
  290.                                  short                     menuItem)                            ONEWORDINLINE(0xAA64);
  291.  
  292. EXTERN_API( void )
  293. SetMCEntries                    (short                     numEntries,
  294.                                  MCTablePtr             menuCEntries)                        ONEWORDINLINE(0xAA65);
  295.  
  296. EXTERN_API( void )
  297. DrawMenuBar                        (void)                                                        ONEWORDINLINE(0xA937);
  298.  
  299. EXTERN_API( void )
  300. InvalMenuBar                    (void)                                                        ONEWORDINLINE(0xA81D);
  301.  
  302. EXTERN_API( void )
  303. InitProcMenu                    (short                     resID)                                ONEWORDINLINE(0xA808);
  304.  
  305. EXTERN_API( Handle )
  306. GetMenuBar                        (void)                                                        ONEWORDINLINE(0xA93B);
  307.  
  308. EXTERN_API( void )
  309. SetMenuBar                        (Handle                 menuList)                            ONEWORDINLINE(0xA93C);
  310.  
  311. EXTERN_API( Boolean )
  312. SystemEdit                        (short                     editCmd)                            ONEWORDINLINE(0xA9C2);
  313.  
  314. EXTERN_API( void )
  315. SystemMenu                        (long                     menuResult)                            ONEWORDINLINE(0xA9B5);
  316.  
  317. EXTERN_API( Handle )
  318. GetNewMBar                        (short                     menuBarID)                            ONEWORDINLINE(0xA9C0);
  319.  
  320. EXTERN_API( void )
  321. ClearMenuBar                    (void)                                                        ONEWORDINLINE(0xA934);
  322.  
  323. EXTERN_API( void )
  324. CheckItem                        (MenuHandle             theMenu,
  325.                                  short                     item,
  326.                                  Boolean                 checked)                            ONEWORDINLINE(0xA945);
  327.  
  328. EXTERN_API( short )
  329. CountMItems                        (MenuHandle             theMenu)                            ONEWORDINLINE(0xA950);
  330.  
  331. EXTERN_API( void )
  332. SetMenuFlash                    (short                     count)                                ONEWORDINLINE(0xA94A);
  333.  
  334. EXTERN_API( long )
  335. MenuSelect                        (Point                     startPt)                            ONEWORDINLINE(0xA93D);
  336.  
  337. EXTERN_API( void )
  338. InsertFontResMenu                (MenuHandle             theMenu,
  339.                                  short                     afterItem,
  340.                                  short                     scriptFilter)                        THREEWORDINLINE(0x303C, 0x0400, 0xA825);
  341.  
  342. EXTERN_API( void )
  343. InsertIntlResMenu                (MenuHandle             theMenu,
  344.                                  ResType                 theType,
  345.                                  short                     afterItem,
  346.                                  short                     scriptFilter)                        THREEWORDINLINE(0x303C, 0x0601, 0xA825);
  347.  
  348.  
  349.  
  350. /* 
  351.     CheckItem, CountMItems, and SetMenuFlash should have better names.
  352.     But the shipping InterfaceLib has the old names, so we need
  353.     to define the new and old names and use macros to map the 
  354.     new names to old names for linking with InterfaceLib.
  355. */
  356. #define CheckMenuItem( menu, item, checked )     CheckItem( menu, item, checked )
  357. #define CountMenuItems( menu )                     CountMItems( menu )
  358. #define SetMenuFlashCount( count )                 SetMenuFlash( count )
  359.  
  360.  
  361. #if CGLUESUPPORTED
  362. EXTERN_API_C( MenuHandle )
  363. newmenu                            (short                     menuID,
  364.                                  const char *            menuTitle);
  365.  
  366. EXTERN_API_C( void )
  367. appendmenu                        (MenuHandle             menu,
  368.                                  const char *            data);
  369.  
  370. EXTERN_API_C( void )
  371. insertmenuitem                    (MenuHandle             theMenu,
  372.                                  const char *            itemString,
  373.                                  short                     afterItem);
  374.  
  375. EXTERN_API_C( long )
  376. menuselect                        (const Point *            startPt);
  377.  
  378. EXTERN_API_C( void )
  379. setmenuitemtext                    (MenuHandle             menu,
  380.                                  short                     item,
  381.                                  const char *            itemString);
  382.  
  383. EXTERN_API_C( void )
  384. getmenuitemtext                    (MenuHandle             menu,
  385.                                  short                     item,
  386.                                  char *                    itemString);
  387.  
  388. #endif  /* CGLUESUPPORTED */
  389.  
  390. #if OLDROUTINENAMES
  391. #define AddResMenu(theMenu, theType) AppendResMenu(theMenu, theType)
  392. #define InsMenuItem(theMenu, itemString, afterItem)    InsertMenuItem(theMenu, itemString, afterItem)
  393. #define DelMenuItem( theMenu, item ) DeleteMenuItem( theMenu, item )
  394. #define SetItem(theMenu, item, itemString) SetMenuItemText(theMenu, item, itemString)
  395. #define GetItem(theMenu, item, itemString) GetMenuItemText(theMenu, item, itemString)
  396. #define GetMHandle(menuID) GetMenuHandle(menuID)
  397. #define DelMCEntries(menuID, menuItem) DeleteMCEntries(menuID, menuItem)
  398. #define DispMCInfo(menuCTbl) DisposeMCInfo(menuCTbl)
  399. #if CGLUESUPPORTED
  400. #define addresmenu(menu, data) appendresmenu(menu, data)
  401. #define getitem(menu, item, itemString) getmenuitemtext(menu, item, itemString)
  402. #define setitem(menu, item, itemString) setmenuitemtext(menu, item, itemString)
  403. #define insmenuitem(theMenu, itemString, afterItem)    insertmenuitem(theMenu, itemString, afterItem)
  404. #endif    /* CGLUESUPPORTED */
  405. #endif  /* OLDROUTINENAMES */
  406.  
  407.  
  408.  
  409. #if PRAGMA_STRUCT_ALIGN
  410.     #pragma options align=reset
  411. #elif PRAGMA_STRUCT_PACKPUSH
  412.     #pragma pack(pop)
  413. #elif PRAGMA_STRUCT_PACK
  414.     #pragma pack()
  415. #endif
  416.  
  417. #ifdef PRAGMA_IMPORT_OFF
  418. #pragma import off
  419. #elif PRAGMA_IMPORT
  420. #pragma import reset
  421. #endif
  422.  
  423. #ifdef __cplusplus
  424. }
  425. #endif
  426.  
  427. #endif /* __MENUS__ */
  428.  
  429.